\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[danish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{hyperref}
\author{Andreas Rytman \and Rasmus Lillienskjold \and Michael Olsen}
\title{Gruppe\- og kodekontrakt}

\begin{document}
\maketitle

\tableofcontents
\newpage

\section{Forventninger}
\begin{itemize}
\item Gruppen vil stræbe efter at udarbejde et teknisk dokument, der ligger på et højt niveau.
\item Gruppen ser dette projekt som en mulighed for, at lære om netværk og distribuerede systemer.
\item Gruppen stræber efter at udarbejde en teknisk løsning af høj kvalitet.
\item Alle i gruppen er villige til at arbejde udenfor normal skoletid.
\item Det forventes at alle i gruppen yder en høj indsats i udarbejdelsen af modeller, kode og teknisk løsning.
\item Det forventes at alle i gruppen sætter sig ind i den udarbejde løsning samt det tekniske dokument, og er i stand til at redegøre for dette.
\end{itemize}

\section{Retningslinjer}
\begin{itemize}
\item Alle skal møde hver morgen! – sygdom er den eneste undskyldning.
\item Der skal arbejdes effektiv når gruppen er samlet.
\item Youtube, Facebook og lignende skal holdes på et minimum.
\item Der skal holdes en god tone i gruppen, folk skal behandles med respekt.
\item Folk skal medbringe nødvendige arbejdsredskaber (computer, papir og lignende).
\item Åbenhed omkring idéer.
\item Hvis et gruppemedlem har påtaget sig en opgave, som han senere finder ud af, er for kompleks/stor til at kunne løse på egen hånd, skal dette hurtigst muligt kommunikeres til gruppen.
\item Det forventes ved tidspres at man er villig til at arbejde hjemme, evt. mødes på skype/facebook.
\item Være ærlig når der gives og modtages feedback. 
\item Det forventes at gruppens medlemmer bidrager med idéer til brainstorme og lignende.
\item Arbejdsdagen begynder kl. 8:30 og slutter 13:45. Med mindre andet er aftalt.
\item Hvis en given opgave ikke kan løses, så laves et oplæg til diskussion dagen efter.
\item Ved forsinkelse eller udeblivelse, kontaktes gruppen hurtigst muligt.
\item Gruppemøde ved hver arbejdsdags start.
\item Vigtige beslutninger skal noteres og begrundes med det samme, for at holde en efterfølgende enighed.
\end{itemize}

\section{Videndeling}
\begin{itemize}
\item Kode review som grundlag for fælles forståelse.
\item Korte opsummeringer af hvad folk arbejder med, dette kan eventuelt ske ved fremmøde om morgen.
\item Alle skal inddrages i udarbejdelsen af det tekniske dokument. Hvis der skrives noget til det tekniske dokument forventes det, at de andre i gruppen læser dette og kommenterer.
\end{itemize}

\section{Kontaktoplysninger}
\begin{tabular}{ l r l }
\textbf{Navn} &    \textbf{Telefon}           &    \textbf{Mail}                                                                                               \\
Rasmus         &    25 14 58 18    &    \href{mailto:rlillienskjold@gmail.com}{rlillienskjold@gmail.com}                              \\
Michael          &    60 50 69 93    &    \href{mailto:babysutdk@gmail.com}{babysutdk@gmail.com}                                   \\
Andreas         &    20 12 48 20    &    \href{mailto:andreas@rytman.dk}{andreas@rytman.dk}                                            \\
\end{tabular}

\section{Kodekontrakt for C\#}
Alt kode skrives på engelsk.
\subsection{Navngivning}
\subsection{Namespaces}
Der bliver oprettet følgende namespaces: Db, Model, Ctr, Gui, Exceptions og Utilities.
Exceptions er til specielle exceptions og Utilities er til hjælpeklasser.
\subsubsection{Klasser}
Alle klasser skrives som UpperCamelCase.
Interfaces startes med stort I. 
\subsubsection{Metoder}
Alle metoder er skrevet i UpperCamelCase.
På metoder åbnes og lukkes tuborgklammerne under metodeheaderen. Loops, switch og så videre, åbnes tuborgklammerne under og lukkes under. Metoder der søger og returnerer en liste af objekter starter med search. Metoder der henter et objekt, for eksempel ud fra id, starter med get.
\subsubsection{Variabler}
Alle variabler skrives som lowerCamelCase med underscore foran, samt meningsfulde navne.
Gettere og Settere genereres af Visual Studio og sættes under konstruktøren.
\subsection{Klassestruktur}
\begin{itemize}
\item Klassebeskrivelse, indeholder: beskrivelse af klassen.
\item Konstruktør: inputvariabler navngives som instansvariablerne uden underscore. Der oprettes en metode, kaldet 'Instanciate', som sætter instansvariablerne. De forskellige konstruktører kalder denne metode. Konstruktørerne sættes i orden efter antal inputvariabler, med flest først.
\item Public metoder: input og return skal specificeres, samt en beskrivelse af metoden. 
\item Private metoder: samme system som public metoder. Private metoder står til sidst i klassen.
\end{itemize}

\section{SVN Kontrakt}
Alle filnavne skrives i lowerCamelCase. Alle mapper skrives i UpperCamelCase. Alle commits indeholder kommentarer. 
\subsection{Mappestruktur}
Der oprettes arbejdsmapper for hvert medlem, heri ligges alt der udarbejdes eksklusivt C\# kode.
En mappe til det tekniske dokument, herunder en mappe til figurer og en mappe til kode.
Implementation indeholder C\# projektet.

Opsætningsbeskrivelse:
\begin{verbatim}
SVNMappe
    Implementation
    NonReport
    Worksheets
        MO
        RL
        AR
    Technical report
        Figures
        Code
\end{verbatim}

\section{Trello}
Trello.com vil blive brugt til at styre iterationerne i UP. Herunder timeboxes. Hver timebox vil have en side. Hver side indeholder en liste af opgaver, en liste af færdige, og en liste af ikke færdige opgaver.

\end{document}
